#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout << "构造函数！\n";
    }
    Test(const Test& t)
    {
        std::cout<<"深拷贝构造函数！\n";
    }
    void operator = (const Test& t)
    {    
        std::cout<<"赋值运算符重载深拷贝！\n";
    }
    ~Test()
    {
        std::cout << "析构函数！\n";
    }
};

//RVO优化：(return value optimizer) :返回值优化:返回局部对象不会发生拷贝
//返回左值：全引用
//返回右值 不能引用；（出来就没了）
// Test& func()
// { 
//     // Test t;  //将亡值
//     static Test t1; //左值
//     return t1;
// }
//引用进来，引用出去 
//左值进来，全是引用 
//const 进，const 出

Test& func(Test& t1)  //形参不能被优化
{
    return t1;
}

int main()
{
    // Test t();
    // Test();  //  匿名对象：生命周期只有一行的临时对象
    // while(1);

    //将亡值：马上要释放的值 
    //将亡值也是右值,右值的内存可以直接被夺取
    // Test t = Test(); 
    // Test t(); //与上面一样
    // Test& t2  = func();  

    Test t;
    Test& t2 = func(t);   

    return 0;
}
